<?php
Class ClientesController extends AppController
{
	var $name = 'Clientes';
	var $aFields = array('id','codigo','nombre','condicion_iva','cuit','direccion','localidad_id','telefono_1','interno','celular','fax','mail','pagina_web','descripcion');
	var $fieldsPOST = array('id','codigo','nombre','condicion_iva','cuit','direccion','localidad_id','telefono_1','interno','celular','fax','mail','pagina_web','descripcion');
	var $helpers = array('ajax');
	
	function index(){
		//cargamos el submenu
		$this->setearSubMenu();
	}
	
	function getClientes($sCondicion=null, $sTipo='JSON'){	
		global $aFields;
		
		//pr($this->params);
		//exit;
		
		$this->Cliente->unbindModel(array('hasMany' =>array('Clientepersona','Contrato','Prestacion')));
		if(!empty($sCondicion)){
			$sCondicion = "Cliente.nombre like '" . $sCondicion . "%' limit 0,10";
		}else{
			$sCondicion = "Cliente.nombre like '%'";
		}
		//$fields = array('id', 'codigo', 'nombre','condicion_iva','cuit','direccion','mail', 'telefono_1', 'interno', 'celular','fax', 'mail', 'pagina_web');
		$fields = $aFields;
		$clientes = $this->Cliente->findAll($sCondicion,$fields);

		
		/*$sFilas = '[';
		foreach($clientes as $cliente){
			$cliente['Cliente']['id_cliente'] = $cliente['Cliente']['id'];
			$sFilas .= json_encode($cliente['Cliente']).",";
		}*/
		//$clientes = $this->requestAction("/clientes/listarClientes/$sFiltro");
	//pr($clientes);

		$sFilas="[";
		
			for($i=0; $i<sizeof($clientes); $i++){
			//creamos la tabla de datos
			//array('id','codigo','nombre','condicion_iva','cuit','direccion','localidad_id','telefono_1','interno','celular','fax','mail','pagina_web','descripcion');
			$clientes[$i]['Cliente']['id_cliente'] = $clientes[$i]['Cliente']['id'];
			$gd_id="id_cliente:\"" . $clientes[$i]['Cliente']['id_cliente']. "\"";
			$gd_codigo="codigo:\"" . $clientes[$i]['Cliente']['codigo']. "\"";
			$gd_nombre="nombre:\"" . $clientes[$i]['Cliente']['nombre']. "\"";
			$gd_condicion_iva="condicion_iva:\"" . $clientes[$i]['Cliente']['condicion_iva']. "\"";
			$gd_cuit="cuit:\"" . $clientes[$i]['Cliente']['cuit']. "\"";
			$gd_direccion="direccion:\"" . $clientes[$i]['Cliente']['direccion']. "\"";
			$gd_localidad="localidad_id:\"" . $clientes[$i]['Cliente']['localidad_id']. "\"";
			$gd_telefono="telefono_1:\"" . $clientes[$i]['Cliente']['telefono_1']. "\"";
			$gd_interno="interno:\"" . $clientes[$i]['Cliente']['interno']. "\"";
			$gd_celular="celular:\"" . $clientes[$i]['Cliente']['celular']. "\"";
			$gd_fax="fax:\"" . $clientes[$i]['Cliente']['fax']. "\"";
			$gd_pagina_web="pagina_web:\"" . $clientes[$i]['Cliente']['pagina_web']. "\"";
			$gd_descripcion="descripcion:\"" . $clientes[$i]['Cliente']['descripcion']. "\"";
			$gd_mail="mail:\"" . $clientes[$i]['Cliente']['mail']. "\"";
			
			($i<sizeof($clientes)-1)?$sDelimitador = ',':$sDelimitador = ']';
			
			$sFilas .= "{" . $gd_id ."," . $gd_codigo . "," . $gd_nombre . "," . $gd_condicion_iva . "," . $gd_cuit . "," . $gd_direccion . "," . $gd_localidad . "," . $gd_fax . "," . $gd_interno . ',' . $gd_interno . ',' . $gd_pagina_web . "," . $gd_descripcion . "," . $gd_mail . "}" . $sDelimitador . "\n";
		}
		$this->layout = false;
		echo $sFilas;
		//$clientes = $this->requestAction("/clientes/listarClientes/$sFiltro");
	}
		
	function GenerateUpdate($sTable = NULL, $aRow = array(), $sWhere = NULL){
		$aSet = array();
		foreach($aRow as $sField => $sValue) $aSet[] = "$sField='" . addslashes($sValue) . "'";
		return "UPDATE $sTable SET " . implode(',', $aSet) . (!is_null($sWhere) ? " WHERE $sWhere" : '') . ";";
	}
	
	function editar($iIdCliente){
		if(strlen($_POST['id'])>4){
			$sField = substr($_POST['id'], 5);	
		}else
		{exit;}
		
		
		$sData = $_POST['value'];
		
		//$_POST['id'] = $iIdCliente;
		//unset($_POST['id_cliente']);//sacamos del arreglo a id_cliente

		//sobreescribimos el $_POST['id'] por $_POST['id_clie();nte']
		/*foreach($this->aFields as $sField){
			if(array_key_exists($sField,$aData)){
				$valor[$sField] = $_POST[$sField];
			}
		}*/
		
		$aValor[$sField] = $sData;
		
		$where = "id = ". $iIdCliente;
		$query = $this->GenerateUpdate('clientes',$aValor,$where);
		$this->Cliente->execute($query);
		echo "$sData";
		$this->layout = false;
	}

function seleccionarClientes($primeraParte=null) 
{
	$condicion = array ("nombre" => "LIKE %$primeraParte%");
	return $this->Cliente->generateList($condicion,'nombre ASC', null, '{n}.Cliente.id','{n}.Cliente.nombre' );
}


function seleccionar() 
{
	$this->set('clientes',$this->seleccionarClientes());
}

function getCliente($idCliente=null)
{
	if($idCliente==null)
		return $this->Cliente->findAll();
	else
	$condition = array("id"=> $idCliente);
	return $this->Cliente->find($condition);
}

/*
 * Esta funcion retorna un entero con el ultimo codigo del cliente + 1.
 * Para asiganarselo al nuevo cliente.
 * @return  integer
 */

function getCodigoCliente() {
	$query="select max(codigo)+1 as codigo from clientes";
	$codigo = $this->Cliente->query($query);
	return($codigo[0][0]['codigo']);
	
}

//Esto deberia obtenerse de la DB
function listarCondIva ()
{
	$condiciones_iva = array
	(
		''=>'seleccionar',
		'inscripto' 		=>	'inscripto',
		'no inscripto' 	=> 'no inscripto',
		'exento' 			=> 'exento',
		'monotributo' => 'monotributo',
		'consumidor final' => 'consumidor final',
		'no categorizado' => 'no categorizado'
	);
	return $condiciones_iva;
}

function setearVariablesModify()
{
//seteamos las variables de error para ser mostradas en caso de no poder guardar los datos
	$this->set('status', 'Los datos del cliente deben ser completados.');
	$error = array
	(
		'Cliente/codigo' => 'El código de la empresa no puede contener letras.',
	  	'Cliente/nombre' => 'El nombre ya existe o contiene caracteres no permitidos.',
		'Cliente/cuit' => 'El cuit debe tener el formato XX-XXXXXXXX-X. X:Digitos',
		'Cliente/direccion' => 'La direccion solo puede contener letras y numeros.',
		'Cliente/localidad_id' => 'CP no valido.',
		'Cliente/telefono_1' => 'El telefono no puede contener letras.',
		'Cliente/celular' => 'El celular no puede contener letras.',
		'Cliente/fax' => 'El fax no puede contener letras.',
		'Cliente/mail' => 'El mail no es una direccion de mail valida.',
		'Cliente/pagina_web' => 'La direccion de la pagina no es una url valida.',
		'Persona/dni' => 'El dni no puede ser nulo ni contener letras.',
		'Persona/nombre' => 'El nombre no puede ser nulo ni contener numeros.',
		'Persona/apellido' => 'El apellido no puede ser nulo ni contener numeros',
	);
	$this->set('error',$error);
}

//seteamos las variables de error para ser mostradas en caso de no poder guardar los datos
function setearVariablesAdd()
{
	
	$this->set('statusCliente', 'Los datos del cliente deben ser completados.');
	$error = array 
	(
		'Cliente/codigo' => 'El código de la empresa no puede contener letras.',
	  	'Cliente/nombre' => 'El nombre ya existe o contiene caracteres no permitidos.',
		'Cliente/cuit' => 'El cuit debe tener el formato XX-XXXXXXXX-X. X:Digitos',
		'Cliente/condicion_iva' => 'Debe seleccionar un tipo de condicion de iva',
		'Cliente/contrato_duracion' => 'La duracion no puede ser nulo ni contener letras.',
	    'Persona/dni' => 'Este campo no puede contener letras.',
		'Persona/nombre' => 'El nombre no puede ser nulo ni contener numeros.',
		'Persona/apellido' => 'El apellido no puede ser nulo ni contener numeros'
	);
	$this->set('error',$error);
}

//agrega los datos de un cliente en la base de datos
//devuelve true si puede agregarlo y false si no lo consigue
function addCliente()
{
	if(!empty($this->data))//si existen datos intenta guardar los datos
	{
		if($this->Cliente->save($this->data))
			return true;
		else
			return false;
	}
	else
		return false;	
}

//agrega el cliente, agrega a la persona responsable y crea dicha relacion(responsable cliente)
function add()
{
	//setea las variables
	$this->setearVariablesAdd();

	//cargamos el submenu
	$this->setearSubMenu();
	
	//obtiene el proximo codigo del cliente
	$this->set('codigoCliente',$this->getCodigoCliente());
	
	//Seteamos las condiciones de iva.
	$this->set('condiciones_iva',$this->listarCondIva());
	
	//valida los campos de la persona responsable
	$this->Cliente->Clientepersona->Persona->data = $this->data;
	$personaValida = $this->Cliente->Clientepersona->Persona->validates();	
	
	//Se valida si es consumidor final, se le asigna 99-99999999-9
	if(($this->data['Cliente']['condicion_iva']) == 'consumidor final') 
	{
		$this->data['Cliente']['cuit']='99-99999999-9';
	}

	//valida los campos del cliente
	$this->Cliente->data = $this->data;//los campos del cliente
	$clienteValido = $this->Cliente->validates();
	
	//si los campos no son vacio
	if(!empty($this->data))
		//si son correctos los campos del cliente y los campos de la persona entra
		if ( $clienteValido && $personaValida )
		{
			//guarda la persona
			$this->requestAction("personas/addPersona");
			//guarda el cliente
			$this->addCliente();
			//guarda la relacion cliente responsable persona en la tabla clientepersonas
			$dniPersona = $this->data['Persona']['dni'];
			//si el campo es vacio se le asigna cero
			if($dniPersona=='') 
				$dniPersona = '0';
				//consigue el id persona
			$idPersona  = $this->requestAction("personas/getIdOfDni/$dniPersona");
			$idCliente  = $this->Cliente->getLastInsertId();
				
				//guarda la relacion			
			$this->requestAction("clientepersonas/setResponsable/$idCliente/$idPersona/");
				//guarda el contrato
			$fechaIni=$this->data['Cliente']['contrato_fechaIni'];
			$cantMeses = $this->data['Cliente']['contrato_duracion'];
			
			$this->requestAction("contratos/add/$idCliente/$fechaIni/$cantMeses/");	
				//setea el estado
 			$this->set('status','Los datos del cliente han sido guardados con exito');	
		}
		else
		{
			if(!$personaValida)
				//se informa que existe errores con las persona responsable
				$this->set('status', 'Existen campos erroneos: Persona Responsable.');
			else
				$this->set('status', 'Existen campos erroneos: Empresa .');
			pr($this->Cliente->validateErrors());
		}
		
}


/*
 * 
 */
function filtrarClientes($filtro=''){
	$this->setearSubMenu();
	$aClientes = $this->requestAction("/clientes/seleccionarClientes/$filtro/");
	$this->set('aCorregistros',$aClientes);
	$this->render('clientesFiltrados', 'ajax');
}

/*
 * 
 */
function listarModify(){
	//setea los clientes
	$this->setearSubMenu();
	$aClientes = $this->requestAction('/clientes/seleccionarClientes');
	$this->set('aCorregistros',$aClientes);
}

//setea los valores del cliente con id $idCliente y en el caso de haber valores los guarda.
//tambien muestra los responsables y autorizados para cambiarlos, agregarlos y/o eliminarlos
function modify($idCliente=null) 
{
	
	//si es null significa que es llamado de la vista, sino es llamado de modify
	if($idCliente==null)
		$idCliente = $this->data['Cliente']['id'];

	//setea los clientes
	$this->setearSubMenu();		
		
	//setea la variables de errores y status
	$this->setearVariablesModify();
	//setea todos los valores del cliente para modificarlos
	
	//Condiciones de Iva
	$this->set('condiciones_iva',$this->listarCondIva());
	
	//se setea paraGuardar cuando entro por lo menos una vez al formulario
	$entrar = isset($this->data['Cliente']['paraGuardar']);
	
	if (!$entrar){ 
		$this->Cliente->id = $idCliente;
		$this->data = $this->Cliente->read();
		$this->render('modify', 'ajax');
		//recupera el responsable y los autorizados y los setea para la vista
	}
	else //sino guarda los datos
	{ 
		//intenta guardar y muestra un mensaje confirmando la modificacion
		
		//Se valida si es consumidor final, se le asigna 99-99999999-9
		if(($this->data['Cliente']['condicion_iva']) == 'consumidor final') 
		{
		$this->data['Cliente']['cuit']='99-99999999-9';
		}
		
		//valida los campos del cliente
		$this->Cliente->data = $this->data;//los campos del cliente
		$clienteValido = $this->Cliente->validates();
		
		if ($clienteValido)
		{
			$this->Cliente->save($this->data);
			$this->set('status','Datos Modificadoss');
		}
		$this->set('result','Exitoso');
		$this->render('eventResult','ajax');
	}
	$responsable = $this->getResponsable($idCliente);
	$autorizados = $this->getAutorizados($idCliente);
	$this->set('responsable',$responsable);
	$this->set('autorizados',$autorizados);		
}

//agrega una persona autorizada de dicho cliente.
//esta funcion es llamada de la vista modificar cliente, y agrega un autorizado
function addAutorizado($idCliente=null)
{
	//si es null significa que es llamado de la vista, sino es llamado de modify
	if($idCliente==null)
		$idCliente = $this->data['Cliente']['id'];
		
	$this->setearVariablesAdd();
	$this->set('idCliente',$idCliente);
	
	//cargamos el submenu
	$this->setearSubMenu();	
	
	//valida los campos de la persona autorizada
	$this->Cliente->Clientepersona->Persona->data = $this->data;
	$personaValida = $this->Cliente->Clientepersona->Persona->validates();	
	
	if(!empty($this->data)) //si no esta vacio guarda el autorizado
	{
		if($personaValida)//ingresa si los campos son validos
		{
			$this->requestAction("personas/addPersona"); //agrega la persona.
			//setea las variables para crear la relacion cliente -> responsable -> persona
			$dniPersona = $this->data['Persona']['dni'];
			//si el campo es vacio se le asigna cero
			if($dniPersona=='') 
				$dniPersona = '0';
			$idPersona  = $this->requestAction("personas/getIdOfDni/$dniPersona");
			//genera la relacion cliente responsable
			$this->requestAction("clientepersonas/addAutorizado/$idCliente/$idPersona/");
			$this->set('status',"El autorizado ha sido agregado con exito.");
			$this->redirect("clientes/modify/$idCliente");
		}
		else
			$this->set('status',"Alguno de los campos Nombre, Apellido y Dni son nulos o incorrectos.");
	}
}

//cambia el responsabel del cliente
//esta funcion es llamada de la vista modificar cliente, y cambia el responsable

function changeResponsable($idCliente=null)
{
	//si es null significa que es llamado de la vista, sino es llamado de modify
	if($idCliente==null)
		$idCliente = $this->data['Cliente']['id'];
		
	$this->setearVariablesAdd();
	//consigue el responsable
	
	$responsable = $this->getResponsable($idCliente);	
	$this->set('responsable',$responsable);
	$this->set('idCliente',$idCliente);
	
	
	if(!empty($this->data)) //si no esta vacio guarda el nuevo responsable
	{
		if($this->requestAction('personas/validarCampos'))//valida los campos de persona
		{
			$this->requestAction("personas/addPersona"); //si todo bien agrega la persona.
			//setea las variables para crear la relacion cliente -> responsable -> persona
			$dniPersona = $this->data['Persona']['dni'];
			$idPersona  = $this->requestAction("personas/getIdOfDni/$dniPersona");
			//genera la relacion cliente responsable
			$this->requestAction("clientepersonas/setResponsable/$idCliente/$idPersona");
			$this->set('status','Los datos del cliente han sido guardados con exito');
			$this->redirect("clientes/modify/$idCliente");
		}
		else
			$this->set('statusCliente',"Alguno de los campos Nombre, Apellido y Dni son nulos o incorrectos.");
	}
}

//devuelve la persona responsable del cliente con id $clienteId
function getResponsable($idCliente, $sTipo='JSON')
{	
	//setea la condicion para buscar el responsable
	$condicion = array ('id' => $idCliente);
	$personas = $this->Cliente->find($condicion,null,null,2);	
		
		
	//recorre las personas asociadas para ver cual es el responsable
	foreach($personas['Clientepersona'] as $per)
	{
		if($per['encargado']=='1')//si es el encargado lo setea
		{	
			$persona = array 
			( 
				'apellido' => $per['Persona']['apellido'],
				'nombre' => $per['Persona']['nombre'],
				'dni' => $per['Persona']['dni']
			);
			break;
		}
	}
	if(isset($persona)){
		$this->layout = false;
		echo "[{responsable:\"" . $persona['apellido'] . ', ' . $persona['nombre'] . "\"}]";
		//return $persona;
	}	
}

//devuelve un arreglo con las personas autorizadas del cliente con id $clienteId
function getAutorizados($idCliente, $sTipo='JSON')
{	
	uses('json');
	$resultado=array();
	//setea la condicion para buscar los autorizados
	$condicion = array ('id' => $idCliente);
	$personas = $this->Cliente->find($condicion,null,null,2);	
	//recorre las personas asociadas para ver cual es el responsable
	/*foreach($personas['Clientepersona'] as $numero => $per )
	{	
		if($per['encargado']=='0')//si es una persona autorizada lo setea
		$aEncargado[] =  array 
				( 
					'id' => $per['Persona']['id'],
					'apellido' => $per['Persona']['apellido'],
					'nombre' => $per['Persona']['nombre'],
					'dni' => $per['Persona']['dni']
				);
	}
	if(isset($aEncargado)){
		$this->layout = false;
		//$sAutorizados = implode(",", $resultado);
		
		$sFilas="[";
		
			for($i=0; $i<sizeof($aEncargado); $i++){
			//creamos la tabla de datos
			$gd_id="id_encargado:\"" . $aEncargado[$i]['id']. "\"";
			$gd_apellido="apellido:\"" . $aEncargado[$i]['apellido']. "\"";
			$gd_nombre="nombre:\"" . $aEncargado[$i]['nombre']. "\"";
			$gd_dni="dni:\"" . $aEncargado[$i]['dni']. "\"";
			
			($i<sizeof($aEncargado)-1)?$sDelimitador = ',':$sDelimitador = ']';
			
			$sFilas .= "{" . $gd_id ."," . $gd_apellido . "," . $gd_nombre . "," . $gd_dni . "}" . $sDelimitador . "\n";
		}
		*/
		
		//echo "[{autorizados:\"" . $persona['apellido'] . ', ' . $persona['nombre'] . "\"}]";
		//return $persona;
	//}	
	$oJson =& new JSONUtil();
	$this->layout = false;
	pr($personas);
	echo $oJson->arrayToJSON($personas);
	
	//return $resultado;//devuelve un arreglo con los autorizados
}

/**
*Funcion que devuelve la fecha de finalizacion del contrato actual de un cliente.
*
*Esta funcion sirve para saber cuando finaliza un contrato y de esta forma cargar dicha informacion en una prestacion.
*La fecha devuelta es la del contrato actual, el cual puede ser solamente uno.
*@author gush
*@return date
*@param integer $idCliente id del ciente del cual se necesita saber la fecha fin de contrato
*/
function getFechaFinContrato($idCliente)
{	//busca el contrato actual del cliente, 
	//actualmente el cliente solo puede tener 1 contrato
 	$conditions = array('clientes_id'=>$idCliente);
	$fields = null;
	$order = 'fecha_inicio DESC';
	$recursive = null;
	$resultados=$this->Cliente->Contrato->find($conditions,$fields,$order,$recursive);
	return $resultados['Contrato']['fecha_fin'];
}

/**
*Funcion que devuelve la fecha de inicializacion del contrato actual de un cliente.
*
*Esta funcion sirve para saber cuando inicia un contrato.
*La fecha devuelta es la del contrato actual, el cual puede ser solamente uno.
*@author gush
*@return date
*@param integer $idCliente id del ciente del cual se necesita saber la fecha inicio de contrato
*/
function getFechaInicioContrato($idCliente)
{	//busca el contrato actual del cliente, 
	//actualmente el cliente solo puede tener 1 contrato
 	$conditions = array('clientes_id'=>$idCliente);
	$fields = null;
	$order = 'fecha_inicio DESC';
	$recursive = null;
	$resultados=$this->Cliente->Contrato->find($conditions,$fields,$order,$recursive);
	return $resultados['Contrato']['fecha_inicio'];
}

/**
*Funcion que devuelve la duracion de un contrato de un cliente dado
*
*@author gush
*@return integer cantidad de meses del contrato del cliente.
*@param integer $idCliente id del ciente del cual se necesita saber la duracion del contrato
*/
function getDuracionContrato($idCliente)
{
	//$fechaActualTmp es la fecha fin del contrato
	$fechaActualTmp = $this->getFechaFinContrato($idCliente);
	$fechaActualTmp = explode('-',$fechaActualTmp);
	$mesActual 	= $fechaActualTmp[1];//mes inicio de la prestacion
	$anioActual = $fechaActualTmp[0];//anio inicio de la prestacion
	
	$contratoInicio = explode('-',$this->getFechaInicioContrato($idCliente));
	$mesContInicio 	= $contratoInicio[1];//mes inicio de contrato
	$diaContInicio 	= $contratoInicio[2];//anio inicio de la prestacion
	$anioContInicio = $contratoInicio[0];//anio inicio de contrato
	
	//si el anio es el mismo significa que el mesActual debe ser igual o mayor al mesContInicio
	if($anioActual==$anioContInicio)
		if($mesActual==$mesContInicio)//existe solo un mes
			$meses = 1;
		else		//existe mas de un mes y se deben averiguar el estado de los anteriores
			$meses = $mesActual-$mesContInicio+1;
	else 			//sino significa que el anio actual es uno mas que el del inicio de contrato
		if($mesActual!=$mesContInicio)
			$meses = (12 * ($anioActual - $anioContInicio) - ( $mesContInicio - $mesActual));
		else
			$meses = 12 * ($anioActual - $anioContInicio);
	return $meses;
}

/**
*Esta funcion devuelve cuantos articulos tiene un cliente.
*
*Retorna un arreglo en donde el primer registro es la cantidad de altas del articulo y el segundo es la cantidad de bajas del articulo.
*@return array
*@param integer $idCliente id del cliente del cual se necesita saber la disponibilidad
*@param integer $idArticulo id del articulo del cual se necesita saber la cantidad
*@param date $fechaActual fecha que indica el filtro de la prestacion
*/
function getCantidadArticulo($idCliente=null,$idArticulo=null,$fechaActual=null)
{
	//-----------------------------------------------
	//setea los clientes
// 	if($idCliente==null)
// 	{
// 		$clientes = $this->requestAction('/clientes/seleccionarClientes');
// 		$this->set('clientes',$clientes);
// 	}
// 	
// 	//setea los servicios brindados
// 	if($idArticulo==null)
// 	{
// 		$articulos = $this->requestAction('/articulos/seleccionarArticulos');
// 		$this->set('articulos',$articulos);
// 	}
	//-----------------------------------------------
	
	//$fechaActual = '2008-02-01';
	$this->set('articulosAlta','0');
	$this->set('articulosBaja','0');
	
// 	if(!empty($this->data))
// 	{
	  	//-----------------------------------------------
// 		$idCliente=$this->data['Cliente']['id'];
// 		$idArticulo=$this->data['Articulo']['id'];
		//-----------------------------------------------
	  //limito el orden de la recursividad, pido que no busque en clientepersona ni contrato
	  	$this->Cliente->unbindModel(array('hasMany' =>array('Clientepersona','Contrato')));
	  	$this->Cliente->Prestacion->Servicio->unbindModel(array('hasMany' =>array('Servicioobtenido','Serviciobrindado')));
		//identifico de que servicios depende el articulo
		$conditions=array('id'=>$idArticulo);
		$servicios=$this->Cliente->Prestacion->Servicio->Articulo->find($conditions);
		$servicioAlta = $servicios['Articulo']['servicio_alta'];
		$servicioBaja = $servicios['Articulo']['servicio_baja'];
		
		//FILTRO por fecha para saber cuantos productos por fecha se dispone
		$filtrarFecha = "";
		if($fechaActual!=null) {
			$filtrarFecha = "AND(Prestacion.fecha_inicio <= '$fechaActual')AND(Prestacion.fecha_fin >= '$fechaActual')";
		}
		
// 		if($fechaHasta!=null)
// 		{
// 			$filtrarFecha .= "AND((DATE_ADD(Prestacion.fecha_fin, INTERVAL 1 MONTH)) >= '$fechaHasta')";
// 		}
		
		//encuentro las prestaciones de esos servicios
		$conditions="(Prestacion.clientes_id = $idCliente)AND(Prestacion.servicios_id = $servicioAlta OR Prestacion.servicios_id = $servicioBaja)".$filtrarFecha;
		//si el parametro idCliente es cero, entonces muestra las cajas totales de ese servicio.
// 		if($idCliente!=0)
// 			$conditions .= "";

		$prestaciones=$this->Cliente->Prestacion->findAll($conditions);
// 		pr($prestaciones);
		//se realiza las sumas de los articulos concluyendo con cuantos articulos posee el cliente
		$sumatoriaBajas=0;
		$sumatoriaAltas=0;
		foreach($prestaciones as $reg)
		{
			if($reg['Prestacion']['servicios_id']==$servicioBaja)//hay que restar al total
				$sumatoriaBajas += $reg['Prestacion']['cantidad'];
			else
				$sumatoriaAltas += $reg['Prestacion']['cantidad'];//sino hay q sumar
		}
		$this->set('articulosAlta',$sumatoriaAltas);
		$this->set('articulosBaja',$sumatoriaBajas);
		//esto es opcional ver si va o no
		$arreglo = array('altas'=>$sumatoriaAltas,'bajas'=>$sumatoriaBajas);
		return $arreglo;
// 	}
}

/**
*Esta funcion devuelve la cantidad de un servicio especifico realizado por un cliente.
*
*@return integer
*@param integer $idCliente id del cliente
*@param integer $idServicio id del servicio
*@param date $fechaActual fecha hasta donde se realiza la consulta
*/
function getCantidadServicio($idCliente,$idServicio,$fechaActual)
{
	//limito el orden de la recursividad, pido que no busque en clientepersona ni contrato
	$this->Cliente->unbindModel(array('hasMany' =>array('Clientepersona','Contrato')));
	$this->Cliente->Prestacion->Servicio->unbindModel(array('hasMany' =>array('Servicioobtenido','Serviciobrindado')));
	
	//FILTRO por fecha para saber cuantos productos por fecha se dispone
	$filtrarFecha = "AND(Prestacion.fecha_inicio <= '$fechaActual')";
	
	//encuentro las prestaciones de esos servicios
	$conditions="(Prestacion.clientes_id = $idCliente)AND(Prestacion.servicios_id = $idServicio)".$filtrarFecha;
	//echo "condiciones $conditions   ";
	$prestaciones=$this->Cliente->Prestacion->findAll($conditions);
	//pr($prestaciones);
	$retorno = 0;
	for($i=0;$i<sizeof($prestaciones);$i++)
	{
		$retorno += $prestaciones[$i]['Prestacion']['cantidad'];
	}
	return $retorno;
}

function transformaFecha($fecha)
{
	$fecha = explode("-",$fecha);
	return $fecha;
// 	return mktime(0,0,0,$fecha[1],$fecha[2],$fecha[0]);

}

	function setearSubMenu(){
		$aSubMenu[0]['title'] = 'Agregar';
		$aSubMenu[0]['href']	 = PATH . 'clientes/add';
		$aSubMenu[0]['image']	 = PATH_IMAGE_SUBMENU . 'btn_agregar_cliente.png';
		
		$aSubMenu[1]['title'] = 'Modificar';
		$aSubMenu[1]['href']	 = PATH . 'clientes/listarModify';
		$aSubMenu[1]['image']	 = PATH_IMAGE_SUBMENU . 'btn_modificar_cliente.png';
		
		$aSubMenu[2]['title'] = 'Listar';
		$aSubMenu[2]['href']	 = PATH . 'clientes';
		$aSubMenu[2]['image']	 = PATH_IMAGE_SUBMENU . 'btn_listar_cliente.png';
			
		
		$this->set('aSubMenu', $aSubMenu);
	
	}
}
?>